/*******************************************************************************
** 文件名称：main.c
** 文件作用：主函数文件
** 编写作者：TomFree <付瑞彪>
** 编写时间：19-04-06
** 文件备注：
**
** 更新记录：
**          2019-04-06 -> 创建文件                                   <Tom Free>
**
**          1 Tab == 4 Spaces     UTF-8     ANSI C Language
*******************************************************************************/

#include "typedef.h"
#include "chip.h"
#include "gpio.h"
#include "timer0.h"
#include "uart0.h"
#include "serialport.h"
#include "log.h"
#include "soft_timer.h"
#include "rfid.h"
#include "protocol.h"
#include "pro_cmd.h"

/* LED端口 */
#define LED_PORT    PC
#define LED_PIN     0

/* 串口驱动 */
SERIAL_PORT_DRIVE SerialPortDrive;
/* 串口buf */
GM_U8 SerialPortRxBuf[128];
GM_U8 SerialPortTxBuf[128];
/* RFID卡号 */
GM_U8 RFID_SNR[4];
/* RFID卡类型 */
GM_U8 RFID_TagType[2];

/*******************************************************************************
** 函数名称：LED_TurnHandler
** 函数作用：LED翻转处理
** 输入参数：argv,argc - 参数
** 输出参数：是否执行OK
** 使用范例：LED_TurnHandler(GM_NULL, 0);
** 函数备注：无需调用
*******************************************************************************/
static GM_BOOL LED_TurnHandler(void* argv, GM_U32 argc)
{
    PIN_OUT(PC, 0) = !PIN_OUT(PC, 0);
    return GM_TRUE;
}

/*******************************************************************************
** 函数名称：main
** 函数作用：主函数
** 输入参数：无
** 输出参数：无
** 使用范例：无需调用，自动执行
** 函数备注：
*******************************************************************************/
int main(void* argv, int argc)
{
    /* 初始化LED端口 */
    PIN_DIR(LED_PORT, LED_PIN) = 1;
    PIN_OUT(LED_PORT, LED_PIN) = 1;

    /* 初始化串口 */
    UART0_Init(9600, UART0_INTERRUPT_NONE);

    /* 注册串口驱动 */
    SerialPortDrive.QueryRxComplete = UART0_QueryRxComplete;
    SerialPortDrive.QueryTxIdle = UART0_QueryTxIdle;
    SerialPortDrive.RxByte = UART0_ReadByte;
    SerialPortDrive.TxByte = UART0_SendByte;
    SerialPort_DriveInit(0, &SerialPortDrive);

    /* 注册串口队列 */
    SerialPort_QueueInit(0, SerialPortRxBuf, sizeof(SerialPortRxBuf), SerialPortTxBuf, sizeof(SerialPortTxBuf));

    /* 初始化定时器0，64分频，溢出中断 */
    TIMER0_Init(TIMER0_DIV64, TIMER0_INTOVF);
    /* 设置初值 */
    TIMER0_SetTCNT0(255 - 125);

    /* 软件定时器初始化 */
    SoftTimer_Init();
    SoftTimer_Setup(SOFT_TIMER_LED, 500, GM_TRUE, LED_TurnHandler);
    SoftTimer_Start(SOFT_TIMER_LED);

    /* 初始化NZ3801 */
    RFID_Init();

    /* 协议初始化 */
    Protocol_Init();

    /* 开启总中断 */
    CHIP_ENABLE_INTERRUPT();

    while (1)
    {
        /* 定时器事件处理 */
        SoftTimer_EventHandler();

        /* 接收数据处理 */
        SerialPort_ReceiveByteHandler(0);

        /* 发送数据处理 */
        SerialPort_SendByteHandler(0);

        /* 协议接收处理 */
        Protocol_ReceiveHandler();
    }

    return 0;
}
